package com.yb.recursion;

/**
 * @program: algorithm_and_data_structure
 * @description: 递归与汉诺塔问题
 * @author: Mr.Bo
 * @create: 2020-07-25 23:08
 **/
public class TestHanoi {
    public static void main(String[] args) {
        hannoi(4, 'A', 'B', 'C');
    }

    /**
     * @param n     共有N个盘子
     * @param from  开始的柱子
     * @param in	中间的柱子
     * @param to    目标的柱子
     *
     */
    public static void hannoi(int n,char from,char in,char to) {
        if (n==1) {
            // 只有一个盘子的情况
            System.out.println("第1个盘子从"+from+"移动到"+to);
        }else {
            //无论有多少个盘子,都认为只有两个.上面的所有盘子和最下面一个盘子

            // 移动上面所有的盘子
            hannoi(n-1, from, to, in);
            // 移动下面的盘子
            System.out.println("第"+n+"个盘子从"+from+"移动到"+to);
            // 把上面的所有盘子从中间位置移动到目标位置
            hannoi(n-1, in, from, to);
        }
    }
}
